package com.AdvancedDemos.集合.双列集合;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class LearnMap的遍历方式 {
    public static void main(String[] args) {
        Map<String, Double> map = new HashMap<>();
        map.put("蜘蛛精", 162.5);
        map.put("蜘蛛精", 169.8);
        map.put("紫霞", 165.8);
        map.put("至尊宝", 169.5);
        map.put("牛魔王", 183.6);
        System.out.println(map);//{蜘蛛精=169.8, 牛魔王=183.6, 至尊宝=169.5, 紫霞=165.8}

        /*Map集合本身不能用迭代器iterator和增强for循环,需要转换成单列集合*/

        /*
        map集合的遍历方式①
         */
        //先获取map集合全部的键,再通过遍历键来找值
        // public Set<K> ketSet(); 获取map集合的全部键
        // public V get(Object key) 根据键获取对应值
        //1.获取全部键
        System.out.println("-------------");
        Set<String> keys = map.keySet();
        System.out.println(keys);//[蜘蛛精, 牛魔王, 至尊宝, 紫霞]
        //2.遍历全部键,根据键获取其对应的值
        for (String key : keys) {
            Double value = map.get(key);
            System.out.println(key + "===>" + value);
            /*蜘蛛精===>169.8
            牛魔王===>183.6
            至尊宝===>169.5
            紫霞===>165.8*/
        }


        /*
        map集合的遍历方式②
         */
        //把"键值对"看成整体进行遍历
        /*需要使用Map提供的方法:
         * Set<Map,Entry<K,V>> entrySet() --- 该方法会把所有"键值对"封装成一个个Map.Entry<K,V>实现类的对象,并加入一个set集合中,Map.Entry<K,V>是Map的一个内部接口
         * Map.Entry提供的方法:
         * K getKey() --- 获取键
         * V getValue() --- 获取值*/

        System.out.println("---------------");
        Set<Map.Entry<String, Double>> entries = map.entrySet();
        for (Map.Entry<String, Double> entry : entries) {
            String key = entry.getKey();
            Double value = entry.getValue();
            System.out.println(key + "==>" + value);
            /*蜘蛛精==>169.8
            牛魔王==>183.6
            至尊宝==>169.5
            紫霞==>165.8*/
        }



        /*
        map集合的遍历方式③
         */
        //forEach+Lambda表达式实现遍历集合
        System.out.println("-------------");
//        map.forEach(new BiConsumer<String, Double>() {
//            @Override
//            public void accept(String s, Double v) {
//                System.out.println(s + "=" + v);
//                //蜘蛛精=169.8
//                //牛魔王=183.6
//                //至尊宝=169.5
//                //紫霞=165.8
//            }
//        });
        //可以使用Lambda表达式简化为
        map.forEach((key, value) -> System.out.println(key + "=" + value));
        //蜘蛛精=169.8
        //牛魔王=183.6
        //至尊宝=169.5
        //紫霞=165.8
    }
}
